home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / misc / amag / sh9302a.lha / Splines (S.31) / Spline.asm < prev    next >
Assembly Source File  |  1988-01-20  |  13KB  |  941 lines

  1. anzahl        =    6    ; Anzahl der Knoten (min. 4)
  2. mulfaktor    =    100
  3. mulfak        =    5    ; Genauigkeitsfaktor
  4.  
  5. x_links        =    1    ; min. 1
  6. x_rechts    =    10    ; min. 1
  7. y_oben        =    5    ; min. 1
  8. y_unten        =    1    ; min. 1
  9. y_delta        =    240/(y_oben+y_unten)
  10. x_delta        =    620/(x_rechts+x_links)
  11. y_achse        =    y_delta*y_oben
  12. x_achse        =    x_delta*x_links
  13.  
  14. AllocMem    =    -198
  15. FreeMem        =    -210
  16. Forbid        =    -132
  17. Permit        =    -138
  18. OpenLibrary    =    -552
  19. CloseLibrary    =    -414
  20. RawDoFmt    =    -522
  21. Write        =    -48
  22. Output        =    -60
  23.  
  24. breite        =    88
  25. bs        =    breite*312
  26.  
  27.  
  28.  
  29.     move.l    4.w,a6
  30.     move.l    #Copper_Ende-sprite+5*bs,d0
  31.     move.l    #$10002,d1
  32.     jsr    AllocMem(a6)
  33.     move.l    d0,copperBase
  34.     beq    Ende
  35.     add.l    #Copper_Ende-sprite,d0
  36.     move.l    d0,bild
  37.     add.l    #2*bs,d0
  38.     move.l    d0,bild2
  39.  
  40.     lea    Copper(pc),a1
  41.     move    d0,6(a1)
  42.     swap    d0
  43.     move    d0,2(a1)
  44.     swap    d0
  45.     add.l    #bs,d0
  46.  
  47.     lea    punkte(pc),a0
  48.     moveq    #anzahl-1,d7
  49. Int_pk:    move.l    d0,(a0)
  50.     addq.l    #6,a0
  51.     dbra    d7,Int_pk
  52.  
  53.     move    d0,14(a1)
  54.     swap    d0
  55.     move    d0,10(a1)
  56.     swap    d0
  57.     add.l    #bs,d0
  58.     move    d0,22(a1)
  59.     swap    d0
  60.     move    d0,18(a1)
  61.  
  62.     move.l    copperBase,d0
  63.     move    d0,30(a1)
  64.     swap    d0
  65.     move    d0,26(a1)
  66.     swap    d0
  67.  
  68.     lea    sprite(pc),a1
  69.     move.l    d0,a0
  70.     move    #Copper_Ende-sprite-1,d7
  71. Copy:    move.b    (a1)+,(a0)+
  72.     dbra    d7,Copy
  73.  
  74.     jsr    Forbid(a6)
  75.  
  76.     lea    $dff000,a6
  77.     bsr    Init
  78.  
  79.     move.l    copperBase,d0
  80.     add.l    #Copper-sprite,d0
  81.     move    #$3e0,$96(a6)
  82.     move.l    d0,$80(a6)
  83.     clr    $88(a6)
  84.     move    #%1000001111100000,$96(a6)
  85.  
  86.  
  87.     lea    mulu88(pc),a0
  88.     move.l    bild2,a4
  89.     lea    978(a4),a5
  90.     moveq    #0,d0
  91.     moveq    #100,d1
  92.     move    #624,d2
  93.     moveq    #100,d3
  94.     bsr    Line
  95.  
  96.     bsr    Koordinatensystem
  97.  
  98.     lea    x+4(pc),a0
  99.     lea    y+4(pc),a1
  100.     moveq    #anzahl-1,d7
  101.     move    #624*mulfak,d6
  102.     divu    d7,d6
  103.     moveq    #4*mulfak,d5
  104. Tab:    move.l    d5,(a0)+
  105.     add    d6,d5
  106.     move.l    #100*mulfak,(a1)+
  107.     dbra    d7,Tab
  108.  
  109.  
  110. Wait_Rt:move.l    4(a6),d0
  111.     and.l    #$000fff00,d0
  112.     cmp.l    #$00000f00,d0
  113.     bne.s    Wait_Rt
  114.  
  115.     btst    #10,$16(a6)
  116.     bne    NoModify
  117.  
  118.     move    #800*mulfak,d2
  119.     move    maus+2(pc),d0
  120.     sub    #124,d0
  121.     mulu    #2*mulfak,d0
  122.     lea    x+4(pc),a0
  123.     lea    y(pc),a1
  124.     move.l    d0,d3
  125.  
  126.     move    #anzahl-1,d7
  127. Approx:    move.l    (a0)+,d1
  128.     sub    d1,d0
  129.     bpl.s    Positiv
  130.     neg    d0
  131. Positiv:cmp    d0,d2
  132.     bmi.s    Found
  133.     move    d0,d2
  134.     move    d3,d0
  135.     addq.l    #4,a1
  136.     dbra    d7,Approx
  137.     sub    #2*mulfak,d3
  138.     bra.s    Last
  139.  
  140. Found:    subq.l    #4,a0
  141.     add    #2*mulfak,d3
  142.     cmp.l    (a0),d3
  143.     bpl    NoSprite
  144.     sub    #4*mulfak,d3
  145. Last:    cmp.l    -8(a0),d3
  146.     bmi    NoSprite
  147.     sub    #2*mulfak,d3
  148.  
  149.     move.l    d3,-(a0)
  150.     
  151.     move    maus(pc),d0
  152.     sub    #57,d0
  153.     mulu    #mulfak,d0
  154.     subq    #2,d0
  155.     move    d0,2(a1)
  156.  
  157.     move    #mulfak*mulfaktor,d4
  158.     bsr    MakeSpline
  159.  
  160.     lea    $dff000,a6
  161.     lea    bild(pc),a0
  162.     move.l    (a0)+,a4
  163.     move.l    (a0),d1
  164.     move.l    a4,(a0)
  165.     move.l    d1,-(a0)
  166.  
  167.     move.l    a4,a5
  168.     bsr    ClearPic
  169.  
  170.     lea    x+4*anzahl(pc),a0
  171.     move.l    (a0),d0
  172.  
  173. Draw:    move.l    d0,-(sp)
  174.     move    #mulfak*mulfaktor,d1
  175.     bsr    Funktionswert        ; y-Wert in d1
  176.  
  177.     divu    #mulfak,d1
  178.     move.l    (sp),d0
  179.     move.l    d0,d4
  180.     divu    #mulfak,d0
  181.     ext.l    d0
  182.  
  183.     lea    lineto(pc),a1
  184.     move    (a1)+,d2
  185.     move    (a1)+,d3
  186.     move    d1,-(a1)
  187.     move    d0,-(a1)
  188.  
  189.     tst    d1
  190.     bmi.s    NoLine
  191.     cmp    #245,d1
  192.     bpl.s    NoLine
  193.     tst    d3
  194.     bmi.s    NoLine
  195.     cmp    #245,d3
  196.     bpl.s    NoLine
  197.  
  198.     cmp.l    x+4*anzahl(pc),d4
  199.     beq.s    NoLine
  200.  
  201.     lea    mulu88(pc),a0
  202.     lea    978(a4),a5
  203.     bsr    Line
  204.  
  205. NoLine:    move.l    (sp)+,d0
  206.     sub.l    #3*mulfak,d0
  207.     cmp.l    x+4(pc),d0
  208.     bge.s    Draw
  209.  
  210.     lea    punkte(pc),a0
  211.     moveq    #anzahl-1,d7
  212. Clr_pk:    move    (a0)+,d0
  213.     move.l    (a0)+,a1
  214.     bclr    d0,(a1)
  215.     dbra    d7,Clr_pk
  216.  
  217.     lea    mulu88(pc),a0
  218.     lea    x+4(pc),a1
  219.     lea    y+4(pc),a2
  220.     lea    punkte(pc),a3
  221.     moveq    #anzahl-1,d7
  222.  
  223. Knoten:    move.l    (a1)+,d1
  224.     divu    #mulfak,d1
  225.     move.l    (a2)+,d2
  226.     divu    #mulfak,d2
  227.     add    d2,d2
  228.     lea    bs+978(a4),a5
  229.     add    (a0,d2.w),a5
  230.     move    d1,d2
  231.     lsr    #3,d2
  232.     lea    (a5,d2.w),a5
  233.     moveq    #15,d2
  234.     and.b    d2,d1
  235.     not.b    d1
  236.     bset    d1,(a5)
  237.     move    (a3),d0
  238.     move    d1,(a3)+
  239.     move.l    (a3),d1
  240.     move.l    a5,(a3)+
  241.     move.l    d1,a5
  242.     bclr    d0,(a5)
  243.     dbra    d7,Knoten
  244.  
  245.     move.l    copperBase,a0
  246.     lea    Copper-sprite(a0),a0
  247.     move.l    a4,d0
  248.     move    d0,6(a0)
  249.     swap    d0
  250.     move    d0,2(a0)
  251.     swap    d0
  252.     add.l    #bs,d0
  253.     move    d0,14(a0)
  254.     swap    d0
  255.     move    d0,10(a0)
  256.  
  257. NoModify:
  258.     lea    $a(a6),a0
  259.     lea    maus(pc),a2
  260.     move    (a2)+,d1
  261.     move    (a2)+,d0
  262.     cmp    #126,d0
  263.     bpl.s    Xmin
  264.     move    #126,-2(a2)
  265.     bra.s    NoMaus
  266. Xmin:    cmp    #436,d0
  267.     bmi.s    Xmax
  268.     move    #435,-2(a2)
  269.     bra.s    NoMaus
  270. Xmax:    cmp    #57,d1
  271.     bpl.s    Ymin
  272.     move    #57,-4(a2)
  273.     bra.s    NoMaus
  274. Ymin:    cmp    #299,d1
  275.     bmi.s    Ymax
  276.     move    #298,-4(a2)
  277. NoMaus:    move    (a0),(a2)
  278.     bra.s    NoSprite
  279.  
  280. Ymax:    move.b    (a0)+,d1
  281.     sub.b    (a2)+,d1
  282.     ext    d1
  283.     add    d1,-5(a2)
  284.     move.b    (a0)+,d0
  285.     sub.b    (a2)+,d0
  286.     ext    d0
  287.     add    d0,-4(a2)
  288.     move    -(a0),-(a2)
  289.  
  290.     move    -(a2),d0
  291.     move    -(a2),d1
  292.  
  293.     moveq    #0,d3
  294.     moveq    #3,d2
  295.     move.l    copperBase,a0
  296.     move.b    d1,(a0)
  297.     btst    #8,d1
  298.     beq.s    noY
  299.     bset    #2,d3
  300. noY:    add    d2,d1
  301.     move.b    d1,2(a0)
  302.     btst    #8,d1
  303.     beq.s    noZ
  304.     bset    #1,d3
  305. noZ:    lsr    #1,d0
  306.     bcc.s    noX
  307.     bset    #0,d3
  308. noX:    move.b    d0,1(a0)
  309.     move.b    d3,3(a0)    ; Sprite setzen
  310.  
  311. NoSprite:
  312.     btst    #6,$bfe001
  313.     bne    Wait_Rt
  314.  
  315.     move.l    4.w,a6
  316.     lea    GrafikName(pc),a1
  317.     moveq    #0,d0
  318.     jsr    OpenLibrary(a6)
  319.     tst.l    d0
  320.     beq.s    NoGrafik
  321.     move.l    d0,a1
  322.  
  323.     lea    $dff000,a5
  324.     move.l    38(a1),$80(a5)
  325.     clr    $88(a5)
  326.     move    #$8020,$96(a5)
  327.  
  328.     jsr    CloseLibrary(a6)
  329. NoGrafik:
  330.     jsr    Permit(a6)
  331.  
  332.     move.l    copperBase(pc),a1
  333.     move.l    #Copper_Ende-sprite+5*bs,d0
  334.     jsr    FreeMem(a6)
  335.  
  336.     lea    x+4(pc),a1
  337.     lea    y+4(pc),a2
  338.     moveq    #anzahl-1,d7
  339. Change:    move.l    (a1),d0
  340.     sub    #mulfak*x_achse,d0
  341.     muls    #10*mulfaktor/mulfak,d0
  342.     divs    #x_delta,d0
  343.     ext.l    d0
  344.     move.l    d0,(a1)+
  345.     move.l    (a2),d0
  346.     neg    d0
  347.     add    #mulfak*y_achse,d0
  348.     muls    #10*mulfaktor/mulfak,d0
  349.     divs    #y_delta,d0
  350.     ext.l    d0
  351.     move.l    d0,(a2)+
  352.     dbra    d7,Change
  353.  
  354.     move    #10*mulfaktor,d4
  355.     bsr    MakeSpline
  356.  
  357.     pea    m(pc)
  358.     pea    x(pc)
  359.     pea    y(pc)
  360.     moveq    #anzahl-2,d7
  361.  
  362.     lea    DosName(pc),a1
  363.     moveq    #0,d0
  364.     move.l    4.w,a6
  365.     jsr    OpenLibrary(a6)
  366.     move.l    d0,a6
  367.     beq    Ende
  368.     jsr    Output(a6)
  369.     move.l    d0,handle
  370.  
  371. Funktion:
  372.     move    d7,-(sp)
  373.     addq.l    #4,10(sp)
  374.     addq.l    #4,6(sp)
  375.     addq.l    #4,2(sp)
  376.     move.l    2(sp),a2
  377.     move.l    6(sp),a1
  378.     move.l    10(sp),a0
  379.     bsr    Trans
  380.     
  381.     lea    koeffizient(pc),a0
  382.     move    d0,(a0)+
  383.     move    d3,(a0)+
  384.     move    d5,(a0)+
  385.     move    d4,(a0)+
  386.     move    2(a1),(a0)+
  387.     move    6(a1),(a0)
  388.     move    d6,-(sp)
  389.  
  390.     clr.l    laenge
  391.     lea    koeffizient(pc),a1
  392.     lea    format(pc),a0
  393.     lea    buffer(pc),a3
  394.     lea    Routine(pc),a2
  395.     move.l    4.w,a5
  396.     jsr    RawDoFmt(a5)
  397.  
  398.     move    (sp)+,d6
  399.     move.l    laenge(pc),d3
  400.     lea    buffer(pc),a0
  401. Form:    move.b    (a0)+,d0
  402.     beq.s    FormOk
  403.     cmp.b    #"0",d0
  404.     bmi.s    Form
  405.     cmp.b    #"9",d0
  406.     bgt.s    Form
  407.     lea    -1(a0),a2
  408. Zahl:    cmp.b    #"0",(a0)+
  409.     bmi.s    Komma
  410.     cmp.b    #"9",-1(a0)
  411.     ble.s    Zahl
  412. Komma:    lea    -1(a0),a1
  413.     move    d6,d7
  414. Stelle:    cmp.b    #" ",-(a1)
  415.     bne.s    NoNull
  416.     move.b    #"0",(a1)
  417. NoNull:    dbra    d7,Stelle
  418.     move.l    a2,a3
  419.     cmp.b    #"-",-(a3)
  420.     bne.s    Space
  421.     move.b    #"0",(a3)
  422. Sign:    cmp.b    #"+",-(a3)
  423.     bne.s    Sign
  424.     move.b    #"-",(a3)
  425. Space:    cmp.l    a2,a1
  426.     bmi.s    NoSpace
  427.     move.b    (a2)+,-2(a2)
  428.     bra.s    Space
  429. NoSpace:move.b    #".",-(a1)
  430.     cmp.b    #" ",-(a1)
  431.     bne.s    Form
  432.     move.b    #"0",(a1)
  433.     bra.s    Form
  434.  
  435. FormOk:    move.l    handle,d1
  436.     move.l    #buffer,d2
  437.     jsr    Write(a6)
  438.  
  439.     move    (sp)+,d7
  440.     dbra    d7,Funktion
  441.  
  442.     lea    12(sp),sp
  443.  
  444.     move.l    handle,d1
  445.     move.l    #format2,d2
  446.     move.l    #format3-format2,d3
  447.     jsr    Write(a6)
  448.  
  449.     pea    m+2(pc)
  450.     clr    -(sp)
  451.     moveq    #anzahl-2,d7
  452. Moment:    move    d7,-(sp)
  453.     addq.l    #4,4(sp)
  454.     addq.w    #1,2(sp)
  455.     clr.l    laenge
  456.     lea    koeffizient(pc),a1
  457.     move    2(sp),(a1)
  458.     move.l    4(sp),a0
  459.     move    (a0),2(a1)
  460.     lea    format3(pc),a0
  461.     lea    buffer(pc),a3
  462.     lea    Routine(pc),a2
  463.     move.l    4.w,a5
  464.     jsr    RawDoFmt(a5)
  465.  
  466.     move.l    handle,d1
  467.     move.l    #buffer,d2
  468.     move.l    laenge(pc),d3
  469.     jsr    Write(a6)
  470.     move    (sp)+,d7
  471.     dbra    d7,Moment
  472.     addq.l    #6,sp
  473.  
  474.     move.l    a6,a1
  475.     move.l    4.w,a6
  476.     jsr    CloseLibrary(a6)
  477.  
  478.  
  479. mm:    btst    #10,$dff016
  480.     bne.s    mm
  481.  
  482. Ende:    clr.l    d0
  483.     rts
  484.  
  485.  
  486. Routine:move.b    d0,(a3)+
  487.     addq.l    #1,laenge
  488.     rts
  489.  
  490.  
  491. Trans:
  492.     lea    x2(pc),a3
  493.     lea    y2(pc),a4
  494.     lea    m2(pc),a5
  495.     moveq    #1,d7
  496. Move10:    move.l    (a0)+,d0
  497.     muls    #10,d0
  498.     move.l    d0,(a5)+
  499.     move.l    (a1)+,d0
  500.     muls    #10,d0
  501.     move.l    d0,(a3)+
  502.     move.l    (a2)+,d0
  503.     muls    #10,d0
  504.     move.l    d0,(a4)+
  505.     dbra    d7,Move10
  506.     lea    x2(pc),a1
  507.     lea    y2(pc),a2
  508.     lea    m2(pc),a0
  509.  
  510.     move    #100*mulfaktor,-(sp)
  511. Over:    move    (sp),d0
  512.     ext.l    d0
  513.     divu    #10,d0
  514.     move    d0,(sp)
  515.     move.l    (a0),d0
  516.     divs    #10,d0
  517.     ext.l    d0
  518.     move.l    d0,(a0)
  519.     move.l    4(a0),d0
  520.     divs    #10,d0
  521.     ext.l    d0
  522.     move.l    d0,4(a0)
  523.     move.l    (a1),d0
  524.     divs    #10,d0
  525.     ext.l    d0
  526.     move.l    d0,(a1)
  527.     move.l    4(a1),d0
  528.     divs    #10,d0
  529.     ext.l    d0
  530.     move.l    d0,4(a1)
  531.     move.l    (a2),d0
  532.     divs    #10,d0
  533.     ext.l    d0
  534.     move.l    d0,(a2)
  535.     move.l    4(a2),d0
  536.     divs    #10,d0
  537.     ext.l    d0
  538.     move.l    d0,4(a2)
  539.  
  540.     move.l    (a0),d0
  541.     sub    6(a0),d0
  542.     muls    (sp),d0
  543.     move.l    (a1),d1
  544.     sub    6(a1),d1
  545.     divs    d1,d0
  546.     ext.l    d0
  547.     move.l    (a1),d2
  548.     muls    d0,d2
  549.     divs    (sp),d2
  550.     move.l    (a0),d3
  551.     sub    d2,d3
  552.     asr    #1,d3
  553.     divs    #6,d0
  554.     move.l    (a1),d2
  555.     move    6(a1),d4
  556.     add    d4,d2
  557.     muls    d1,d2
  558.     muls    d4,d4
  559.     divs    (sp),d2
  560.     move    d2,d5
  561.     muls    d3,d2
  562.     divs    (sp),d4
  563.     bvs    Over
  564.     add    d4,d5
  565.     move    d5,d6
  566.     muls    2(a1),d5
  567.     muls    6(a1),d4
  568.     divs    (sp),d5
  569.     bvs    Over
  570.     move    d5,d7
  571.     divs    (sp),d4
  572.     bvs    Over
  573.     sub    d4,d5
  574.     muls    d0,d5
  575.     add.l    d5,d2
  576.     move.l    (a2),d5
  577.     sub    6(a2),d5
  578.     muls    (sp),d5
  579.     sub.l    d2,d5
  580.     divs    d1,d5
  581.     move    2(a2),d1
  582.     muls    (sp),d1
  583.     muls    d0,d7
  584.     muls    d3,d6
  585.     add.l    d7,d6
  586.     move    2(a1),d7
  587.     muls    d5,d7
  588.     move    2(a2),d4
  589.     muls    (sp),d4
  590.     sub.l    d6,d4
  591.     sub.l    d7,d4
  592.     divs    (sp),d4
  593.     move    (sp)+,d7
  594.     moveq    #-2,d6
  595. Stell:    addq    #1,d6
  596.     ext.l    d7
  597.     divu    #10,d7
  598.     bne.s    Stell
  599.     rts
  600. ClearPic:
  601.     btst    #14,2(a6)
  602.     bne.s    ClearPic
  603.     move.l    a5,$54(a6)
  604.     clr    $66(a6)
  605.     move.l    #$1000000,$40(a6)
  606.     move    #300*64+44,$58(a6)
  607.     rts
  608.  
  609. maus:    dc.w    152,285,0
  610.  
  611.  
  612. Init:
  613.     btst    #14,2(a6)
  614.     bne.s    Init
  615.     move    #-1,$72(a6)
  616.     move.l    #-1,$44(a6)
  617.     move    #breite,$60(a6)
  618.     move    #$8000,$74(a6)
  619.  
  620.     move    #255,d7
  621.     lea    mulu88(pc),a0
  622.     moveq    #0,d0
  623. mlo:    move    d0,(a0)+
  624.     add    #breite,d0
  625.     dbf    d7,mlo
  626.     rts
  627.  
  628. mulu88:    dcb.w    256,0
  629.  
  630.  
  631. MakeSpline:
  632.     lea    x(pc),a0
  633.     lea    y(pc),a1
  634.     lea    4(a0),a4
  635.     moveq    #anzahl-2,d7
  636.     lea    delta(pc),a2
  637.     lea    4(a2),a3
  638. Loop:    move.l    4(a4),d0
  639.     sub.l    (a4)+,d0
  640.     move.l    d0,(a3)+
  641.     dbf    d7,Loop
  642.  
  643.     lea    delta2+8(pc),a3
  644.     lea    4(a0),a4
  645.     lea    8(a1),a5
  646.     addq.l    #4,a2
  647.     lea    alpha+8(pc),a6
  648.     moveq    #anzahl-3,d7
  649.  
  650. Loop2:    move.l    8(a4),d0
  651.     sub.l    (a4)+,d0
  652.     add.l    d0,d0
  653.     move.l    d0,(a3)+
  654.  
  655.     move.l    4(a5),d0
  656.     sub.l    (a5),d0
  657.     move.l    4(a2),d1
  658.     muls    d4,d0
  659.     divs    d1,d0
  660.     ext.l    d0
  661.     move.l    (a5)+,d1
  662.     sub.l    -8(a5),d1
  663.     move.l    (a2)+,d2
  664.     muls    d4,d1
  665.     divs    d2,d1
  666.     ext.l    d1
  667.     sub.l    d1,d0
  668.     add.l    d0,d0
  669.     move.l    d0,d1
  670.     add.l    d0,d0
  671.     add.l    d1,d0
  672.     move.l    d0,(a6)+
  673.     dbf    d7,Loop2
  674.  
  675.     lea    m(pc),a6
  676.     clr.l    (a6)
  677.     clr.l    4*anzahl(a6)
  678.     lea    alpha+8(pc),a0
  679.     lea    delta+8(pc),a1
  680.     lea    delta2+8(pc),a2
  681.     moveq    #anzahl-4,d7
  682.  
  683. Loop3:    move.l    (a0)+,d0
  684.     move.l    (a1)+,d1
  685.     move.l    (a2)+,d2
  686.     muls    d1,d0
  687.     divs    d2,d0
  688.     ext.l    d0
  689.     sub.l    d0,(a0)
  690.     muls    d1,d1
  691.     divs    d2,d1
  692.     ext.l    d1
  693.     sub.l    d1,(a2)
  694.     dbf    d7,Loop3
  695.  
  696.     lea    alpha+anzahl*4(pc),a0
  697.     lea    delta+anzahl*4(pc),a1
  698.     lea    delta2+anzahl*4(pc),a2
  699.     lea    m+anzahl*4(pc),a3
  700.     moveq    #anzahl-3,d7
  701.  
  702. Loop4:    move.l    -(a0),d0
  703.     move.l    -(a1),d1
  704.     move.l    -(a2),d2
  705.     move.l    (a3),d3
  706.     muls    d3,d1
  707.     muls    d4,d0
  708.     sub.l    d1,d0
  709.     divs    d2,d0
  710.     ext.l    d0
  711.     move.l    d0,-(a3)
  712.     dbf    d7,Loop4
  713.     rts
  714.  
  715. Funktionswert:
  716.     move    d1,-(sp)
  717.     lea    x+8(pc),a0
  718.     lea    y(pc),a1
  719.     lea    delta(pc),a2
  720.     lea    m(pc),a3
  721. Suchen:    addq.l    #4,a1
  722.     addq.l    #4,a2
  723.     addq.l    #4,a3
  724.     cmp.l    (a0)+,d0
  725.     bgt.s    Suchen
  726.     move.l    (a1)+,d1
  727.     move.l    (a2),d2
  728.     move.l    (a3)+,d3
  729.     sub.l    -8(a0),d0
  730.     muls    (sp),d0
  731.     divs    d2,d0
  732.     ext.l    d0 
  733.     move.l    (a1),d4
  734.     move.l    (a3),d5
  735.     muls    d0,d4
  736.     moveq    #0,d6
  737.     move    (sp),d6
  738.     sub.l    d0,d6
  739.     muls    d6,d1
  740.     add.l    d4,d1
  741.  
  742.     muls    d2,d2
  743.     divs    (sp),d2
  744.     ext.l    d2
  745.  
  746.     move.l    d0,d4
  747.     muls    d0,d0
  748.     divs    (sp),d0
  749.     ext.l    d0
  750.     muls    d4,d0
  751.     muls    (sp),d4
  752.     sub.l    d4,d0
  753.     divs    (sp),d0
  754.     ext.l    d0
  755.  
  756.     muls    d0,d5
  757.     move.l    d6,d4
  758.     muls    d6,d6
  759.     divs    (sp),d6
  760.     ext.l    d6
  761.     muls    d4,d6
  762.     muls    (sp),d4
  763.     sub.l    d4,d6
  764.     divs    (sp),d6
  765.     ext.l    d6
  766.  
  767.     muls    d6,d3
  768.     add.l    d5,d3
  769.     divs    (sp),d3
  770.     ext.l    d3
  771.     muls    d3,d2
  772.  
  773.     moveq    #1,d3
  774.     moveq    #6,d0
  775. Again:    divs    d0,d2
  776.     bvc.s    NoError
  777.     mulu    #10,d0
  778.     mulu    #10,d3
  779.     bra.s    Again
  780. NoError:ext.l    d2
  781.     muls    d3,d2
  782.     add.l    d2,d1
  783.     divs    (sp),d1
  784.     ext.l    d1
  785.  
  786.     addq.l    #2,sp
  787.     rts
  788.  
  789.  
  790. Koordinatensystem:
  791.     lea    bs+978(a4),a3
  792.     lea    bs(a3),a3
  793.     moveq    #0,d0
  794.     move    #y_achse,d1
  795.     move    d1,d3
  796.     move    #620,d2
  797.     move.l    a3,a5
  798.     bsr    Line
  799.     move    #x_achse,d0
  800.     move    d0,d2
  801.     moveq    #0,d1
  802.     move    #240,d3
  803.     move.l    a3,a5
  804.     bsr    Line
  805.  
  806.     move    #x_delta,d0
  807.     moveq    #0,d1
  808.     move    #y_delta,d2
  809. X_Punkt:moveq    #0,d3
  810. Y_Punkt:move    d3,d4
  811.     add    d4,d4
  812.     move.l    a3,a5
  813.     add    (a0,d4.w),a5
  814.     move    d1,d4
  815.     move    d1,d5
  816.     lsr    #3,d4
  817.     lea    (a5,d4.w),a5
  818.     moveq    #15,d4
  819.     and.b    d4,d5
  820.     not.b    d5
  821.     bset    d5,(a5)
  822.     add    d2,d3
  823.     cmp    #240,d3
  824.     ble.s    Y_Punkt
  825.     add    d0,d1
  826.     cmp    #620,d1
  827.     ble.s    X_Punkt
  828.     rts
  829.  
  830.  
  831.  
  832. Line:    cmp    d1,d3
  833.     bgt.s    nohi
  834.     exg    d0,d2
  835.     exg    d1,d3
  836. nohi:    move    d0,d4
  837.     move    d1,d5
  838.     add    d5,d5
  839.     add    (a0,d5.w),a5
  840.     lsr    #4,d4
  841.     add    d4,d4
  842.     lea    (a5,d4.w),a5
  843.     sub    d0,d2
  844.     sub    d1,d3
  845.     moveq    #15,d5
  846.     and.l    d5,d0
  847.     move    d0,d4
  848.     ror.l    #4,d0
  849.     eor    d5,d4
  850.     moveq    #0,d5
  851.     bset    d4,d5
  852.     move    #4,d0
  853.     tst    d2
  854.     bpl.s    l1
  855.     addq.w    #1,d0
  856.     neg    d2
  857. l1:    cmp    d2,d3
  858.     ble.s    l2
  859.     exg    d2,d3
  860.     subq.w    #4,d0
  861.     add    d0,d0
  862. l2:    move    d3,d4
  863.     sub    d2,d4
  864.     add    d4,d4
  865.     add    d4,d4
  866.     add    d3,d3
  867.     moveq    #0,d6
  868.     move    d3,d6
  869.     sub    d2,d6
  870.     bpl.s    l3
  871.     moveq    #16,d1
  872.     or    d1,d0
  873. l3:    add    d3,d3
  874.     add    d0,d0
  875.     add    d0,d0
  876.     addq.w    #1,d2
  877.     lsl    #6,d2
  878.     addq.w    #2,d2
  879.     swap    d3
  880.     move    d4,d3
  881.     or.l    #$0bca0001,d0
  882. wbl:    btst    #14,2(a6)
  883.     bne.s    wbl
  884.     move.l    d3,$62(a6)
  885.     move    d6,$52(a6)
  886.     move.l    a5,$48(a6)
  887.     move.l    a5,$54(a6)
  888.     move.l    d0,$40(a6)
  889.     move    d2,$58(a6)
  890.     rts
  891.  
  892.  
  893. lineto:    dc.w    0,0
  894. punkte:    dcb.w    3*anzahl,0
  895. y:    dcb.l    anzahl+1,0
  896. delta:    dcb.l    anzahl+1,0
  897. delta2:    dcb.l    anzahl+1,0
  898. alpha:    dcb.l    anzahl+1,0
  899. m:    dcb.l    anzahl+1,0    ; Momente
  900. x:    dcb.l    anzahl+1,0
  901. x2:    dc.l    0,0
  902. y2:    dc.l    0,0
  903. m2:    dc.l    0,0
  904. laenge:    dc.l    0
  905. buffer:    dcb.w    50,0
  906.  
  907. koeffizient:    dcb.w    7,0
  908. copperBase:    dc.l    0
  909. bild:    dc.l    0
  910. bild2:    dc.l    0
  911. handle:    dc.l    0
  912.  
  913.  
  914. format:    dc.b    "s(x) = +%7dx",179,"+%7dx",178,"+%7dx+%7d,  "
  915.     dc.b    "+%7d<= x >=+%7d",10,0
  916.     
  917. format2:dc.b    10,"Spline - Momente:",10,0
  918. format3:dc.b    "m[%d] = %5d / 1000",10,0
  919.  
  920. DosName:    dc.b    "dos.library",0
  921. GrafikName:    dc.b    "graphics.library",0
  922.  
  923.     EVEN
  924.  
  925. sprite:    dc.l    0
  926.     dc.w    %0010000000000000,0
  927.     dc.w    %0101000000000000,0
  928.     dc.w    %0010000000000000,0
  929.     dc.l    0
  930.  
  931. Copper:    dc.w    $e0,0,$e2,0,$e4,0,$e6,0,$e8,0,$ea,0
  932.     dc.w    $120,0,$122,0
  933.     dc.w    $100,$b200,$108,0
  934.     dc.w    $8e,$3081,$90,$30c1,$92,$28,$94,$d0
  935.     dc.w    $180,0,$182,$f,$184,$f00,$186,$f00,$1a2,$f00
  936.     dc.w    $188,$f0,$18a,$f,$18c,$f00,$18e,$f00
  937.     dc.w    $124,0,$126,0,$128,0,$12a,0,$12c,0,$12e,0,$130,0
  938.     dc.w    $132,0,$134,0,$136,0,$138,0,$13a,0,$13c,0,$13e,0
  939.     dc.l    -2
  940. Copper_Ende:
  941.